using BW.WMS.WareHouseManage.Dtos;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;

namespace BW.WMS.WareHouseManage.IServices
{
    /// <summary>
    /// 库区服务接口
    /// </summary>
    public interface IZoneAppService : IApplicationService
    {
        /// <summary>
        /// 添加库区
        /// </summary>
        /// <param name="input">添加库区DTO</param>
        /// <returns>库区DTO</returns>
        Task<ZoneDto> CreateAsync(AddZoneDto input);
        
        /// <summary>
        /// 获取库区列表
        /// </summary>
        /// <param name="input">分页请求</param>
        /// <returns>库区列表</returns>
        Task<PagedResultDto<ZoneDto>> GetPagedListAsync(PagedZoneRequestDto input);
        
        /// <summary>
        /// 获取库区信息
        /// </summary>
        /// <param name="id">库区ID</param>
        /// <returns>库区DTO</returns>
        Task<ZoneDto> GetAsync(Guid id);
        
        /// <summary>
        /// 根据仓库ID获取库区列表
        /// </summary>
        /// <param name="warehouseId">仓库ID</param>
        /// <returns>库区列表</returns>
        Task<List<ZoneDto>> GetZonesByWarehouseIdAsync(Guid warehouseId);
        
        /// <summary>
        /// 删除库区
        /// </summary>
        /// <param name="id">库区ID</param>
        Task DeleteAsync(Guid id);

        /// <summary>
        /// 修改库区信息
        /// </summary>
        /// <param name="id">库区ID</param>
        /// <param name="input">修改库区DTO</param>
        /// <returns>库区DTO</returns>
        Task<ZoneDto> UpdateAsync(Guid id, UpdateZoneDto input);

        /// <summary>
        /// 批量删除库区
        /// </summary>
        /// <param name="ids">库区ID列表</param>
        /// <returns>删除结果</returns>
        Task<BatchDeleteResultDto> BatchDeleteAsync(List<Guid> ids);
    }
}